//
//  UITableView+ZKChain.h
//  ChainFun
//
//  Created by 洪绵卫 on 2022/1/10.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN
/*
     所有函数均只有getter函数.
     zk_frame 对应的 frame属性 其余一样，去除zk_ 后边的为对应的属性名
 */
@interface UITableView (ZKChain)

/* 因为父类的Category中返回的是UIView类型，不便于链式继续调用，所以这里写同名的get方法，返回值不同 */

/// 初始化 没有设置Frame
+ (UITableView * _Nonnull (^)(void))zk_allocInit;

/// 带Frame的初始化
+ (UITableView * _Nonnull (^)(CGRect))zk_allocInitWithFrame;

/// 设置View的Frame
- (UITableView * _Nonnull (^)(CGRect))zk_frame;

/// 设置View的背景色
- (UITableView * _Nonnull (^)(UIColor * _Nonnull))zk_backgroundColor;

/// 将View添加到父视图上
- (UITableView * _Nonnull (^)(UIView * _Nonnull))zk_addToSuperView;

/// 设置View是否允许交互
- (UITableView * _Nonnull (^)(BOOL))zk_userInteractionEnabled;

/// 设置View的Tag
- (UITableView * _Nonnull (^)(NSInteger))zk_tag;

/// 设置View的Bounds
- (UITableView * _Nonnull (^)(CGRect))zk_bounds;

/// 设置View的中心点
- (UITableView * _Nonnull (^)(CGPoint))zk_center;

/// 设置View的透明度
- (UITableView * _Nonnull (^)(CGFloat))zk_alpha;

/// 设置View的隐藏状态
- (UITableView * _Nonnull (^)(BOOL))zk_hidden;

/// 设置View的TitColor
- (UITableView * _Nonnull (^)(UIColor * _Nonnull))zk_tintColor;

#pragma mark UIScrollView 的

/// 内容偏移量
- (UITableView * _Nonnull (^)(CGPoint))zk_contentOffset;

/// 内容大小
- (UITableView * _Nonnull (^)(CGSize))zk_contentSize;

/// 内容边距
- (UITableView * _Nonnull (^)(UIEdgeInsets))zk_contentInset;

/// 确定调整后的内容偏移量的行为。
- (UITableView * _Nonnull (^)(UIScrollViewContentInsetAdjustmentBehavior))zk_contentInsetAdjustmentBehavior API_AVAILABLE(ios(11.0));

/// 表示系统是否自动调整滚动指示器的插入。
- (UITableView * _Nonnull (^)(BOOL))zk_automaticallyAdjustsScrollIndicatorInsets API_AVAILABLE(ios(13.0));

/// 边框是否支持回弹效果
- (UITableView * _Nonnull (^)(BOOL))zk_bounces;

/// 垂直方向边框是否支持回弹效果
- (UITableView * _Nonnull (^)(BOOL))zk_alwaysBounceVertical;

/// 水平方向边框是否支持回弹效果
- (UITableView * _Nonnull (^)(BOOL))zk_alwaysBounceHorizontal;

/// 是否分页
- (UITableView * _Nonnull (^)(BOOL))zk_pagingEnabled;

/// 是否可以滚动
- (UITableView * _Nonnull (^)(BOOL))zk_scrollEnabled;

/// 是否显示垂直显示器
- (UITableView * _Nonnull (^)(BOOL))zk_showsVerticalScrollIndicator;

/// 是否显示水平显示器
- (UITableView * _Nonnull (^)(BOOL))zk_showsHorizontalScrollIndicator;

/// 指示器样式
- (UITableView * _Nonnull (^)(UIScrollViewIndicatorStyle))zk_indicatorStyle;

/// 垂直方向指示器的偏移量
- (UITableView * _Nonnull (^)(UIEdgeInsets))zk_verticalScrollIndicatorInsets API_AVAILABLE(ios(11.1), tvos(11.1));;

/// 水平方向指示器的偏移量
- (UITableView * _Nonnull (^)(UIEdgeInsets))zk_horizontalScrollIndicatorInsets API_AVAILABLE(ios(11.1), tvos(11.1));

/// 指示器的偏移量
- (UITableView * _Nonnull (^)(UIEdgeInsets))zk_scrollIndicatorInsets;

/// 最小缩放
- (UITableView * _Nonnull (^)(CGFloat))zk_minimumZoomScale;

/// 最大缩放
- (UITableView * _Nonnull (^)(CGFloat))zk_maximumZoomScale;

/// 缩放尺度
- (UITableView * _Nonnull (^)(CGFloat))zk_zoomScale;

/// 它决定当缩放超过最大或最小限制时滚动视图是否对内容缩放进行动画处理
- (UITableView * _Nonnull (^)(BOOL))zk_bouncesZoom;

/// 控制是否启用滚动到顶部的手势
- (UITableView * _Nonnull (^)(BOOL))zk_scrollsToTop;

/// 在滚动视图中开始拖动时取消键盘的方式
- (UITableView * _Nonnull (^)(UIScrollViewKeyboardDismissMode))zk_keyboardDismissMode;

/// 刷新控制
- (UITableView * _Nonnull (^)(UIRefreshControl * _Nullable))zk_refreshControl API_AVAILABLE(ios(10.0));

#pragma mark 对应UITableView 的一些属性

/// 初始化函数
+ (UITableView * _Nonnull (^)(CGRect,UITableViewStyle))zk_allocInitWithFrameAndStyle;

/// 设置数据源
- (UITableView * _Nonnull (^)(id <UITableViewDataSource> _Nullable))zk_dataSource;

/// 设置代理
- (UITableView * _Nonnull (^)(id <UITableViewDelegate> _Nullable))zk_delegate;

/// 作为表视图的预取数据源的对象，接收即将到来的单元格数据需求的通知。
- (UITableView * _Nonnull (^)(id <UITableViewDataSourcePrefetching> _Nullable))zk_prefetchDataSource API_AVAILABLE(ios(10.0));

///  管理从表视图拖动项的委托对象。
- (UITableView * _Nonnull (^)(id <UITableViewDragDelegate> _Nullable))zk_dragDelegate API_AVAILABLE(ios(11.0));

/// 管理将内容拖放到表视图中的委托对象。
- (UITableView * _Nonnull (^)(id <UITableViewDropDelegate> _Nullable))zk_dropDelegate API_AVAILABLE(ios(11.0));

/// 表视图中每行的默认高度(点)
- (UITableView * _Nonnull (^)(CGFloat))zk_rowHeight;

/// 表视图中section头的高度
- (UITableView * _Nonnull (^)(CGFloat))zk_sectionHeaderHeight;

/// 表视图中section尾的高度
- (UITableView * _Nonnull (^)(CGFloat))zk_sectionFooterHeight;

/// 表视图中行的估计高度
- (UITableView * _Nonnull (^)(CGFloat))zk_estimatedRowHeight;

/// 表视图中section头的估计高度。
- (UITableView * _Nonnull (^)(CGFloat))zk_estimatedSectionHeaderHeight;

/// 表视图中section尾的估计高度。
- (UITableView * _Nonnull (^)(CGFloat))zk_estimatedSectionFooterHeight;

/// 填充表视图的空行的高度。
- (UITableView * _Nonnull (^)(CGFloat))zk_fillerRowHeight API_AVAILABLE(ios(15.0), tvos(15.0), watchos(8.0));

/// 每个部分标题上方的填充量
- (UITableView * _Nonnull (^)(CGFloat))zk_sectionHeaderTopPadding API_AVAILABLE(ios(15.0), tvos(15.0), watchos(8.0));

/// separator偏移量
- (UITableView * _Nonnull (^)(UIEdgeInsets))zk_separatorInset;

/// 指示如何解释分隔符插入值的指示器
- (UITableView * _Nonnull (^)(UITableViewSeparatorInsetReference))zk_separatorInsetReference API_AVAILABLE(ios(11.0), tvos(11.0));

/// 背景视图
- (UITableView * _Nonnull (^)(UIView * _Nullable))zk_backgroundView;

/// 用作分隔符的表格单元格的样式
- (UITableView * _Nonnull (^)(UITableViewCellSeparatorStyle))zk_separatorStyle;

/// 设置分隔符的颜色
- (UITableView * _Nonnull (^)(UIColor * _Nullable))zk_separatorColor;

/// 适用于表分隔符的效果
- (UITableView * _Nonnull (^)(UIVisualEffect * _Nullable))zk_separatorEffect;

/// tableView头部视图
- (UITableView * _Nonnull (^)(UIView * _Nullable))zk_tableHeaderView;

/// tableView尾部视图
- (UITableView * _Nonnull (^)(UIView * _Nullable))zk_tableFooterView;


#pragma mark 对应 UITableView 的一些方法

@end

NS_ASSUME_NONNULL_END
